﻿#pragma once
#include "XyNet/Global.h"

namespace XyNet
{
	struct XYNET_API StringConverter
	{
		/// 是否是小端序
		static bool isLittleEndian();
		/// 是否是大端序
		static bool isBigEndian();

		/// 字节向量转int
		static int bytesToInt(const Bytes& input);
		/// int转字节向量
		static Bytes intToBytes(int input);

		//////////////////////////////////////////////////////////////////////////

		/// 字节向量转十六进制字符串
		static string bytesToHexString(const Bytes& input, bool uppercase = true);
		/// 十六进制字符串转字节向量
		static Bytes hexStringToBytes(const string& input);

		/// 字节向量转base64字符串
		static string bytesToBase64String(const Bytes& input);
		/// base64字符串转字节向量
		static Bytes base64StringToBytes(const string& input);

		//////////////////////////////////////////////////////////////////////////

		/// 本地ANSI编码字符串转UTF8编码字符串
		static string localToUtf8(const string& input);
		/// UTF8编码字符串转本地ANSI编码字符串
		static string utf8ToLocal(const string& input);

#ifdef XYNET_PLATFORM_WINDOWS
		/// UTF8编码字符串转宽字符串
		static wstring utf8ToWideString(const string& input);
		/// 宽字符串转UTF8编码字符串
		static string wideStringToUtf8(const wstring& input);
#endif
	};
}